home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / jade / man / jade.info-4 (.txt) < prev    next >
GNU Info File  |  1995-03-09  |  50KB  |  1,074 lines

  1. This is Info file jade.info, produced by Makeinfo-1.55 from the input
  2. file jade.texi.
  3. START-INFO-DIR-ENTRY
  4. * Jade: (jade).            An editor for X11 and AmigaDOS
  5. END-INFO-DIR-ENTRY
  6.    This is Edition 1.3, last updated 7 October 1994, of `The Jade
  7. Manual', for Jade, Version 3.2.
  8.    Jade is a text editor for X11 (on Unix) and the Amiga.
  9.    Copyright 1993, 1994 John Harper.
  10.    Permission is granted to make and distribute verbatim copies of this
  11. manual provided the copyright notice and this permission notice are
  12. preserved on all copies.
  13.    Permission is granted to copy and distribute modified versions of
  14. this manual under the conditions for verbatim copying, provided that
  15. the entire resulting derived work is distributed under the terms of a
  16. permission notice identical to this one.
  17. File: jade.info,  Node: Characters,  Prev: Numeric Predicates,  Up: Numbers
  18. Characters
  19. ----------
  20.    In Jade characters are stored in integers. Their read syntax is a
  21. question mark followed by the character itself which may be an escape
  22. sequence introduced by a backslash. For details of the available escape
  23. sequences see *Note Strings::.
  24.      ?a
  25.          => 97
  26.      
  27.      ?\n
  28.          => 10
  29.      
  30.      ?\177
  31.          => 127
  32.  - Function: alpha-char-p CHARACTER
  33.      This function returns `t' when CHARACTER is one of the alphabetic
  34.      characters.
  35.           (alpha-char-p ?a)
  36.               => t
  37.  - Function: upper-case-p CHARACTER
  38.      When CHARACTER is one of the upper-case characters this function
  39.      returns `t'.
  40.  - Function: lower-case-p CHARACTER
  41.      Returns `t' when CHARACTER is lower-case.
  42.  - Function: digit-char-p CHARACTER
  43.      This function returns `t' when CHARACTER is one of the decimal
  44.      digit characters.
  45.  - Function: alphanumericp CHARACTER
  46.      This function returns `t' when CHARACTER is either an alphabetic
  47.      character or a decimal digit character.
  48.  - Function: space-char-p CHARACTER
  49.      Returns `t' when CHARACTER is a white-space character (space, tab,
  50.      newline or form feed).
  51.  - Function: char-upcase CHARACTER
  52.      This function returns the upper-case equivalent of CHARACTER. If
  53.      CHARACTER is already upper-case or has no upper-case equivalent it
  54.      is returned unchanged.
  55.           (char-upcase ?a)
  56.               => 65                       ;`A'
  57.           
  58.           (char-upcase ?A)
  59.               => 65                       ;`A'
  60.           
  61.           (char-upcase ?!)
  62.               => 33                       ;`!'
  63.  - Function: char-downcase CHARACTER
  64.      Returns the lower-case equivalent of the character CHARACTER.
  65. File: jade.info,  Node: Sequences,  Next: Symbols,  Prev: Numbers,  Up: Programming Jade
  66. Sequences
  67. =========
  68.    Sequences are ordered groups of objects, there are several primitive
  69. types which can be considered sequences, each with its own good and bad
  70. points.
  71.    A sequence is either an array or a list, where an array is either a
  72. vector or a string.
  73.  - Function: sequencep OBJECT
  74.      This function returns `t' if OBJECT is a sequence, `nil' otherwise.
  75. * Menu:
  76. * Cons Cells::                  An ordered pair of two objects
  77. * Lists::                       Chains of cons cells
  78. * Vectors::                     A chunk of memory holding a number of objects
  79. * Strings::                     Strings are efficiently-stored vectors
  80. * Array Functions::             Accessing elements in vectors and strings
  81. * Sequence Functions::          These work on any type of sequence
  82. File: jade.info,  Node: Cons Cells,  Next: Lists,  Up: Sequences
  83. Cons Cells
  84. ----------
  85.    A "cons cell" is an ordered pair of two objects, the "car" and the
  86. "cdr".
  87.    The read syntax of a cons cell is an opening parenthesis followed by
  88. the read syntax of the car, a dot, the read syntax of the cdr and a
  89. closing parenthesis. For example a cons cell with a car of 10 and a cdr
  90. of the string `foo' would be written as,
  91.      (10 . "foo")
  92.  - Function: cons CAR CDR
  93.      This function creates a new cons cell. It will have a car of CAR
  94.      and a cdr of CDR.
  95.           (cons 10 "foo")
  96.               => (10 . "foo")
  97.  - Function: consp OBJECT
  98.      This function returns `t' if OBJECT is a cons cell and `nil'
  99.      otherwise.
  100.           (consp '(1 . 2))
  101.               => t
  102.           
  103.           (consp nil)
  104.               => nil
  105.           
  106.           (consp (cons 1 2))
  107.               => t
  108.    In Lisp an "atom" is any object which is not a cons cell (and is,
  109. therefore, atomic).
  110.  - Function: atom OBJECT
  111.      Returns `t' if OBJECT is an atom (not a cons cell).
  112.    Given a cons cell there are a number of operations which can be
  113. performed on it.
  114.  - Function: car CONS-CELL
  115.      This function returns the object which the car of the cons cell
  116.      CONS-CELL.
  117.           (car (cons 1 2))
  118.               => 1
  119.           
  120.           (car '(1 . 2))
  121.               => 1
  122.  - Function: cdr CONS-CELL
  123.      This function returns the cdr of the cons cell CONS-CELL.
  124.           (cdr (cons 1 2))
  125.               => 2
  126.           
  127.           (cdr '(1 . 2))
  128.               => 2
  129.  - Function: rplaca CONS-CELL NEW-CAR
  130.      This function sets the value of the car in the cons cell CONS-CELL
  131.      to NEW-CAR. The value returned is NEW-CAR.
  132.           (setq x (cons 1 2))
  133.               => (1 . 2)
  134.           (rplaca x 3)
  135.               => 3
  136.           x
  137.               => (3 . 2)
  138.  - Function: rplacd CONS-CELL NEW-CDR
  139.      This function is similar to `rplacd' except that the cdr slot of
  140.      CONS-CELL is modified.
  141. File: jade.info,  Node: Lists,  Next: Vectors,  Prev: Cons Cells,  Up: Sequences
  142. Lists
  143. -----
  144.    A list is a sequence of zero or more objects, the main difference
  145. between lists and vectors is that lists are more dynamic: they can
  146. change size, be split, reversed, concatenated, etc... very easily.
  147.    In Lisp lists are not a primitive type; instead singly-linked lists
  148. are created by chaining cons cells together (*note Cons Cells::.).
  149.  - Function: listp OBJECT
  150.      This functions returns `t' when its argument, OBJECT, is a list
  151.      (i.e. either a cons cell or `nil').
  152. * Menu:
  153. * List Structure::              How lists are built from cons cells
  154. * Building Lists::              Dynamically creating lists
  155. * Accessing List Elements::     Getting at the elements which make the list
  156. * Modifying Lists::             How to alter the contents of a list
  157. * Association Lists::           Lists can represent relations
  158. * Infinite Lists::              Circular data structures in Lisp
  159. File: jade.info,  Node: List Structure,  Next: Building Lists,  Up: Lists
  160. List Structure
  161. ..............
  162.    Each element in a list is given its own cons cell and stored in the
  163. car of that cell. The list object is then constructed by making the cdr
  164. of a cell contain the cons cell of the next element (and hence the
  165. whole tail of the list). The cdr of the cell containing the last
  166. element in the list is `nil'. A list of zero elements is represented by
  167. the symbol `nil'.
  168.    The read syntax of a list is an opening parenthesis, followed by the
  169. read syntax of zero or more space-separated objects, followed by a
  170. closing parenthesis. Alternatively, lists can be constructed `manually'
  171. using dotted-pair notation.
  172.    All of the following examples result in the same list of five
  173. elements: the numbers from zero to four.
  174.      (0 1 2 3 4)
  175.      
  176.      (0 . (1 . (2 . (3 . (4 . nil)))))
  177.      
  178.      (0 1 2 . (3 4))
  179.    An easy way to visualise lists and how they are constructed is to
  180. see each cons cell in the list as a separate "box" with pointers to its
  181. car and cdr,
  182.      +-----+-----+
  183.      |  o  |  o----> cdr
  184.      +--|--+-----+
  185.         |
  186.          --> car
  187.    Complex box-diagrams can now be drawn to represent lists. For
  188. example the following diagram represents the list `(1 2 3 4)'.
  189.      +-----+-----+   +-----+-----+   +-----+-----+   +-----+-----+
  190.      |  o  |  o----> |  o  |  o----> |  o  |  o----> |  o  |  o----> nil
  191.      +--|--+-----+   +--|--+-----+   +--|--+-----+   +--|--+-----+
  192.         |               |               |               |
  193.          --> 1           --> 2           --> 3           --> 4
  194.    A more complex example, the list `((1 2) (foo bar))' can be drawn as,
  195.      +-----+-----+                          +-----+-----+
  196.      |  o  |  o---------------------------> |  o  |  o----> nil
  197.      +--|--+-----+                          +--|--+-----+
  198.         |                                      |
  199.      +-----+-----+   +-----+-----+          +-----+-----+   +-----+-----+
  200.      |  o  |  o----> |  o  |  o----> nil    |  o  |  o----> |  o  |  o----> nil
  201.      +--|--+-----+   +--|--+-----+          +--|--+-----+   +--|--+-----+
  202.         |               |                      |               |
  203.          --> 1           --> 2                  --> foo         --> bar
  204.    Sometimes when manipulating complex list structures it is very
  205. helpful to make a diagram of what it is that's being manipulated.
  206. File: jade.info,  Node: Building Lists,  Next: Accessing List Elements,  Prev: List Structure,  Up: Lists
  207. Building Lists
  208. ..............
  209.    It has already been shown how you can create lists using the Lisp
  210. reader; this method does have a drawback though: the list created is
  211. effectively static. If you modify the contents of the list and that
  212. list was created when a function was defined the list will remain
  213. modified for all future invocations of that function. This is not
  214. usually a good idea, consider the following function definition,
  215.      (defun bogus-function (x)
  216.        "Return a list whose first element is nil and whose second element is X."
  217.        (let
  218.            ((result '(nil nil)))     ;Static list which is filled in each time
  219.          (rplaca (cdr result) x)     ; the function is called
  220.          result))
  221. This function does in fact do what its documentation claims, but a
  222. problem arises when it is called more than once,
  223.      (setq x (bogus-function 'foo))
  224.          => (nil foo)
  225.      (setq y (bogus-function 'bar))
  226.          => (nil bar)               ;The first result has been destroyed
  227.      x
  228.          => (nil bar)               ;See!
  229.    This example is totally contrived -- no one would ever write a
  230. function like the one in the example but it nicely demonstrates the
  231. need for a dynamic method of creating lists.
  232.  - Function: list &rest ELEMENTS
  233.      This function creates a list out of its arguments, if zero
  234.      arguments are given the empty list, `nil', is returned.
  235.           (list 1 2 3)
  236.               => (1 2 3)
  237.           
  238.           (list (major-version-number) (minor-version-number))
  239.               => (3 2)
  240.           
  241.           (list)
  242.               => nil               ;Equivalent to `()'
  243.  - Function: make-list LENGTH &optional INITIAL-VALUE
  244.      This function creates a list LENGTH elements long. If the
  245.      INITIAL-VALUE argument is given it defines the value of all
  246.      elements in the list, if it is not given they are all `nil'.
  247.           (make-list 2)
  248.               => (nil nil)
  249.           
  250.           (make-list 3 t)
  251.               => (t t t)
  252.           
  253.           (make-list 0)
  254.               => nil
  255.  - Function: append &rest LISTS
  256.      This function creates a new list with the elements of each of its
  257.      arguments (which must be lists). Unlike the function `nconc' this
  258.      function preserves all of its arguments.
  259.           (append '(1 2 3) '(4 5))
  260.               => (1 2 3 4 5)
  261.           
  262.           (append)
  263.               => nil
  264.      What actually happens is that all arguments but the last are copied
  265.      then the last argument is linked on to the end of the list
  266.      (uncopied).
  267.           (setq foo '(1 2))
  268.               => (1 2)
  269.           (setq bar '(3 4))
  270.               => (3 4)
  271.           (setq baz (append foo bar))
  272.               => (1 2 3 4)
  273.           (eq (nthcdr 2 baz) bar)
  274.               => t
  275.      The following diagram shows the final state of the three variables
  276.      more clearly,
  277.           foo--> +-----+-----+   +-----+-----+
  278.                  |  o  |  o----> |  o  |     |
  279.                  +--|--+-----+   +--|--+-----+
  280.                     |               |
  281.                     o--> 1          o--> 2   bar
  282.                     |               |          ->
  283.           baz--> +--|--+-----+   +--|--+-----+   +-----+-----+   +-----+-----+
  284.                  |  o  |  o----> |  o  |  o----> |  o  |  o----> |  o  |     |
  285.                  +-----+-----+   +-----+-----+   +--|--+-----+   +--|--+-----+
  286.                                                     |               |
  287.                                                      --> 3           --> 4
  288.      Note how `foo' and the first half of `baz' use the *same* objects
  289.      for their elements -- copying a list only copies its cons cells,
  290.      its elements are reused. Also note how the variable `bar' actually
  291.      references the mid-point of `baz' since the last list in an
  292.      `append' call is not copied.
  293.  - Function: reverse LIST
  294.      This function returns a new list; it is made from the elements of
  295.      the list LIST in reverse order. Note that this function does not
  296.      alter its argument.
  297.           (reverse '(1 2 3 4))
  298.               => (4 3 2 1)
  299.    As a postscript to this section, the function used as an example at
  300. the beginning could now be written as,
  301.      (defun not-so-bogus-function (x)
  302.        (list nil x))
  303.    Also note that the `cons' function can be used to create lists by
  304. hand and to add new elements onto the front of a list.
  305. File: jade.info,  Node: Accessing List Elements,  Next: Modifying Lists,  Prev: Building Lists,  Up: Lists
  306. Accessing List Elements
  307. .......................
  308.    The most powerful method of accessing an element in a list is via a
  309. combination of the `car' and `cdr' functions. There are other functions
  310. which provide an easier way to get at the elements in a flat list.
  311. These will usually be faster than a string of `car' and `cdr'
  312. operations.
  313.  - Function: nth COUNT LIST
  314.      This function returns the element COUNT elements down the list,
  315.      therefore to access the first element use a COUNT of zero (or even
  316.      better the `car' function). If there are too few elements in the
  317.      list and no element number COUNT can be found `nil' is returned.
  318.           (nth 3 '(0 1 2 3 4 5))
  319.               => 3
  320.           
  321.           (nth 0 '(foo bar)
  322.               => foo
  323.  - Function: nthcdr COUNT LIST
  324.      This function takes the cdr of the list LIST COUNT times,
  325.      returning the last cdr taken.
  326.           (nthcdr 3 '(0 1 2 3 4 5))
  327.               => (3 4 5)
  328.           
  329.           (nthcdr 0 '(foo bar))
  330.               => (foo bar)
  331.  - Function: last LIST
  332.      This function returns the last element in the list LIST. If the
  333.      list has zero elements `nil' is returned.
  334.           (last '(1 2 3))
  335.               => 3
  336.           
  337.           (last '())
  338.               => nil
  339.  - Function: member OBJECT LIST
  340.      This function scans through the list LIST until it finds an element
  341.      which is `equal' to OBJECT. The tail of the list (the cons cell
  342.      whose car is the matched object) is then returned. If no elements
  343.      match OBJECT then the empty list `nil' is returned.
  344.           (member 'c '(a b c d e))
  345.               => (c d e)
  346.           
  347.           (member 20 '(1 2))
  348.               => nil
  349.  - Function: memq OBJECT LIST
  350.      This function is similar to `member' except that comparisons are
  351.      performed by the `eq' function not `equal'.
  352. File: jade.info,  Node: Modifying Lists,  Next: Association Lists,  Prev: Accessing List Elements,  Up: Lists
  353. Modifying Lists
  354. ...............
  355.    The `nthcdr' function can be used in conjunction with the `rplaca'
  356. function to modify an arbitrary element in a list. For example,
  357.      (rplaca (nthcdr 2 '(0 1 2 3 4 5)) 'foo)
  358.          => foo
  359. sets the third element of the list `(0 1 2 3 4 5)' to the symbol called
  360. `foo'.
  361.    There are also functions which modify the structure of a whole list.
  362. These are called "destructive" operations because they modify the actual
  363. structure of a list -- no copy is made. This can lead to unpleasant
  364. side effects if care is not taken.
  365.  - Function: nconc &rest LISTS
  366.      This function is the destructive equivalent of the function
  367.      `append', it modifies its arguments so that it can return a list
  368.      which is the concatenation of the elements in its arguments lists.
  369.      Like all the destructive functions this means that the lists given
  370.      as arguments are modified (specifically, the cdr of their last
  371.      cons cell is made to point to the next list). This can be seen
  372.      with the following example (similar to the example in the `append'
  373.      documentation).
  374.           (setq foo '(1 2))
  375.               => (1 2)
  376.           (setq bar '(3 4))
  377.               => (3 4)
  378.           (setq baz (nconc foo bar))
  379.               => (1 2 3 4)
  380.           foo
  381.               => (1 2 3 4)                ;`foo' has been altered!
  382.           (eq (nthcdr 2 baz) bar)
  383.               => t
  384.      The following diagram shows the final state of the three variables
  385.      more clearly,
  386.           foo-->                           bar-->
  387.           baz--> +-----+-----+   +-----+-----+   +-----+-----+   +-----+-----+
  388.                  |  o  |  o----> |  o  |  o----> |  o  |  o----> |  o  |     |
  389.                  +--|--+-----+   +--|--+-----+   +--|--+-----+   +--|--+-----+
  390.                     |               |               |               |
  391.                      --> 1           --> 2             --> 3           --> 4
  392.  - Function: nreverse LIST
  393.      This function rearranges the cons cells constituting the list LIST
  394.      so that the elements are in the reverse order to what they were.
  395.           (setq foo '(1 2 3))
  396.               => (1 2 3)
  397.           (nreverse foo)
  398.               => (3 2 1)
  399.           foo
  400.               => (1)                      ;`foo' wasn't updated when the list
  401.                                           ; was altered.
  402.  - Function: delete OBJECT LIST
  403.      This function destructively removes all elements of the list LIST
  404.      which are `equal' to OBJECT then returns the modified list.
  405.           (delete t '(nil t nil t nil))
  406.               => (nil nil nil)
  407.      When this function is used to remove an element from a list which
  408.      is stored in a variable that variable must be set to the return
  409.      value of the `delete' function. Otherwise, if the first element of
  410.      the list has to be deleted (because it is `equal' to OBJECT) the
  411.      value of the variable will not change.
  412.           (setq foo '(1 2 3))
  413.               => (1 2 3)
  414.           (delete 1 foo)
  415.               => (2 3)
  416.           foo
  417.               => (1 2 3)
  418.           (setq foo (delete 1 foo))
  419.               => (2 3)
  420.  - Function: delq OBJECT LIST
  421.      This function is similar to the `delete' function, the only
  422.      difference is that the `eq' function is used to compare OBJECT
  423.      with each of the elements in LIST, instead of the `equal' function
  424.      which is used by `delete'.
  425. File: jade.info,  Node: Association Lists,  Next: Infinite Lists,  Prev: Modifying Lists,  Up: Lists
  426. Association Lists
  427. .................
  428.    An "association list" (or "alist") is a list mapping key values to
  429. to other values. Each element of the alist is a cons cell, the car of
  430. which is the "key", the cdr is the value that it associates to. For
  431. example an alist could look like,
  432.      ((fred . 20)
  433.       (bill . 30))
  434. this alist has two keys, `fred' and `bill' which both associate to an
  435. integer (20 and 30 respectively).
  436.    It is possible to make the associated values lists, this looks like,
  437.      ((fred 20 male)
  438.       (bill 30 male)
  439.       (sue  25 female))
  440. in this alist the symbol `fred' is associated with the list `(20 male)'.
  441.    There are a number of functions which let you interrogate an alist
  442. with a given key for its association.
  443.  - Function: assoc KEY ALIST
  444.      This function scans the association list ALIST for the first
  445.      element whose car is `equal' to KEY, this element is then
  446.      returned. If no match of KEY is found `nil' is returned.
  447.           (assoc 'two '((one . 1) (two . 2) (three . 3)))
  448.               => (two . 2)
  449.  - Function: assq KEY ALIST
  450.      Similar to the function `assoc' except that the function `eq' is
  451.      used to compare elements instead of `equal'.
  452.      It is not usually wise to use `assq' when the keys of the alist
  453.      may not be symbols -- `eq' won't think two objects are equivalent
  454.      unless they are the *same* object!
  455.           (assq "foo" '(("bar" . 1) ("foo" . 2)))
  456.               => nil
  457.           (assoc "foo" '(("bar" . 1) ("foo" . 2)))
  458.               => ("foo" . 2)
  459.  - Function: rassoc ASSOCIATION ALIST
  460.      This function searches through ALIST until it finds an element
  461.      whose cdr is `equal' to ASSOCIATION, that element is then returned.
  462.      `nil' will be returned if no elements match.
  463.           (rassoc 2 '((one . 1) (two . 2) (three . 3)))
  464.               => (two . 2)
  465.  - Function: rassq ASSOCIATION ALIST
  466.      This function is equivalent to `rassoc' except that it uses `eq'
  467.      to make comparisons.
  468. File: jade.info,  Node: Infinite Lists,  Prev: Association Lists,  Up: Lists
  469. Infinite Lists
  470. ..............
  471.    Sometimes it is useful to be able to create `infinite' lists -- that
  472. is, lists which appear to have no last element -- this can easily be
  473. done in Lisp by linking the cdr of the last cons cell in the list
  474. structure back to the beginning of the list.
  475.       -----------------------------------
  476.      |                                   |
  477.       --> +-----+-----+   +-----+-----+  |
  478.           |  o  |  o----> |  o  |  o-----
  479.           +--|--+-----+   +--|--+-----+
  480.              |               |
  481.               --> 1           --> 2
  482.    The diagram above represents the infinite list `(1 2 1 2 1 2 ...)'.
  483.    Infinite lists have a major drawback though, many of the standard
  484. list manipulation functions can not be used on them. These functions
  485. work by moving through the list until they reach the end. If the list
  486. has *no* end the function may never terminate and the only option is to
  487. send Jade an interrupt signal (*note Interrupting Jade::.).
  488.    The only functions which may be used on circular lists are: the cons
  489. cell primitives (`cons', `car', `cdr', `rplaca', `rplacd'), `nth' and
  490. `nthcdr'.
  491.    Also note that infinite lists can't be printed.
  492. File: jade.info,  Node: Vectors,  Next: Strings,  Prev: Lists,  Up: Sequences
  493. Vectors
  494. -------
  495.    A vector is a fixed-size sequence of Lisp objects, each element may
  496. be accessed in constant time -- unlike lists where the time taken to
  497. access an element is proportional to the position of the element.
  498.    The read syntax of a vector is an opening square bracket, followed
  499. by zero or more space-separated objects, followed by a closing square
  500. bracket. For example,
  501.      [zero one two three]
  502.    In general it is best to use vectors when the number of elements to
  503. be stored is known and lists when the sequence must be more dynamic.
  504.  - Function: vectorp OBJECT
  505.      This function returns `t' if its argument, OBJECT, is a vector.
  506.  - Function: vector &rest ELEMENTS
  507.      This function creates a new vector containing the arguments given
  508.      to the function.
  509.           (vector 1 2 3)
  510.               => [1 2 3]
  511.           
  512.           (vector)
  513.               => []
  514.  - Function: make-vector SIZE &optional INITIAL-VALUE
  515.      Returns a new vector, SIZE elements big. If INITIAL-VALUE is
  516.      defined each element of the new vector is set to INITIAL-VALUE,
  517.      otherwise they are all `nil'.
  518.           (make-vector 4)
  519.               => [nil nil nil nil]
  520.           
  521.           (make-vector 2 t)
  522.               => [t t]
  523. File: jade.info,  Node: Strings,  Next: Array Functions,  Prev: Vectors,  Up: Sequences
  524. Strings
  525. -------
  526.    A string is a vector of characters (*note Characters::.), they are
  527. generally used for storing and manipulating pieces of text. Jade puts
  528. no restrictions on the values which may be stored in a string --
  529. specifically, the null character (`^@') may be stored with no problems.
  530.    The read syntax of a string is a double quote character, followed by
  531. the contents of the string, the object is terminated by a second double
  532. quote character. For example, `"abc"' is the read syntax of the string
  533. `abc'.
  534.    Any backslash characters in the string's read syntax introduce an
  535. escape sequence; one or more of the following characters are treated
  536. specially to produce the next *actual* character in the string.
  537.    The following escape sequences are supported (all are shown without
  538. their leading backslash `\' character).
  539.      A newline character.
  540.      A carriage return character.
  541.      A form feed character.
  542.      A TAB character.
  543.      A `bell' character (this is Ctrl-g).
  544.      The `control' code of the character C. This is calculated by
  545.      toggling the seventh bit of the *upper-case* version of C.
  546.      For example,
  547.           \^C             ;A Ctrl-c character (ASCII value 3)
  548.           \^@            ;The NUL character (ASCII value 0)
  549. `012'
  550.      The character whose ASCII value is the octal value `012'. After the
  551.      backslash character the Lisp reader reads up to three octal digits
  552.      and combines them into one character.
  553. `x12'
  554.      The character whose ASCII value is the hexadecimal value `12', i.e.
  555.      an `x' character followed by one or two hex digits.
  556.  - Function: stringp OBJECT
  557.      This function returns `t' if its argument is a string.
  558.  - Function: make-string LENGTH &optional INITIAL-CHARACTER
  559.      Creates a new string containing LENGTH characters, each character
  560.      is initialised to INITIAL-CHARACTER (or to spaces if
  561.      INITIAL-CHARACTER is not defined).
  562.           (make-string 3)
  563.               => "   "
  564.           
  565.           (make-string 2 ?$)
  566.               => "$$"
  567.  - Function: concat &rest ARGS
  568.      This function concatenates all of its arguments, ARGS, into a
  569.      single string which is returned. If no arguments are given then
  570.      the null string (`') results.
  571.      Each of the ARGS may be a string, a character or a list or vector
  572.      of characters. Characters are stored in strings modulo 256.
  573.           (concat "foo" "bar")
  574.               => "foobar"
  575.           
  576.           (concat "a" ?b)
  577.               => "ab"
  578.           
  579.           (concat "foo" [?b ?a ?r])
  580.               => "foobar"
  581.           
  582.           (concat)
  583.               => ""
  584.  - Function: substring STRING START &optional END
  585.      This function creates a new string which is a partial copy of the
  586.      string STRING. The first character copied is START characters from
  587.      the beginning of the string. If the END argument is defined it is
  588.      the index of the character to stop copying at, if it is not defined
  589.      all characters until the end of the string are copied.
  590.           (substring "xxyfoozwx" 3 6)
  591.               => "foo"
  592.           
  593.           (substring "xyzfoobar" 3)
  594.               => "foobar"
  595.  - Function: string= STRING1 STRING2
  596.      This function compares the two strings STRING1 and STRING2 -- if
  597.      they are made from the same characters in the same order then `t'
  598.      is returned, else `nil'.
  599.           (string= "one" "one")
  600.               => t
  601.           
  602.           (string= "one" "two")
  603.               => nil
  604.      Note that an alternate way to compare strings (or anything!) is to
  605.      use the `equal' function.
  606.  - Function: string< STRING1 STRING2
  607.      This function returns `t' if STRING1 is `less' than `string2'.
  608.      This is determined by comparing the two strings a character at a
  609.      time, the first pair of characters which do not match each other
  610.      are then compared with a normal `less-than' function.
  611.      In Jade the standard `<' function understands strings so `string<'
  612.      is just a macro calling that function.
  613.           (string< "abc" "abd")
  614.               => t
  615.           
  616.           (string< "abc" "abb")
  617.               => nil
  618.    Functions are also available which match regular expressions with
  619. strings (*note Search and Match Functions::.) and which apply a mapping
  620. to each character in a string (*note Translation Functions::.).
  621. File: jade.info,  Node: Array Functions,  Next: Sequence Functions,  Prev: Strings,  Up: Sequences
  622. Array Functions
  623. ---------------
  624.  - Function: arrayp OBJECT
  625.      This function returns `t' if OBJECT is an array.
  626.  - Function: aref ARRAY POSITION
  627.      Returns the element of the array (vector or string) ARRAY POSITION
  628.      elements from the first element (i.e. the first element is
  629.      numbered zero).  If no element exists at POSITION in ARRAY, `nil'
  630.      is returned.
  631.           (aref [0 1 2 3] 2)
  632.               => 2
  633.           
  634.           (aref "abcdef" 3)
  635.               => 100                      ;`d'
  636.  - Function: aset ARRAY POSITION VALUE
  637.      This function sets the element of the array ARRAY with an index of
  638.      POSITION (counting from zero) to VALUE. An error is signalled if
  639.      element POSITION does not exist. The result of the function is
  640.      VALUE.
  641.           (setq x [0 1 2 3])
  642.               => [0 1 2 3]
  643.           (aset x 2 'foo)
  644.               => foo
  645.           x
  646.               => [0 1 foo 3]
  647. File: jade.info,  Node: Sequence Functions,  Prev: Array Functions,  Up: Sequences
  648. Sequence Functions
  649. ------------------
  650.  - Function: length SEQUENCE
  651.      This function returns the length (an integer) of the sequence
  652.      SEQUENCE.
  653.           (length "abc")
  654.               => 3
  655.           
  656.           (length '(1 2 3 4))
  657.               => 4
  658.           
  659.           (length [x y])
  660.               => 2
  661.  - Function: copy-sequence SEQUENCE
  662.      Returns a new copy of the sequence SEQUENCE. Where possible (in
  663.      lists and vectors) only the `structure' of the sequence is newly
  664.      allocated: the same objects are used for the elements in both
  665.      sequences.
  666.           (copy-sequence "xy")
  667.               => "xy"
  668.           
  669.           (setq x '("one" "two"))
  670.               => ("one" "two")
  671.           (setq y (copy-sequence x))
  672.               => ("one" "two")
  673.           (eq x y)
  674.               => nil
  675.           (eq (car x) (car y))
  676.               => t
  677.  - Function: elt SEQUENCE POSITION
  678.      This function returns the element of SEQUENCE POSITION elements
  679.      from the beginning of the sequence.
  680.      This function is a combination of the `nth' and `aref' functions.
  681.           (elt [0 1 2 3] 1)
  682.               => 1
  683.           
  684.           (elt '(foo bar) 0)
  685.               => foo
  686. File: jade.info,  Node: Symbols,  Next: Evaluation,  Prev: Sequences,  Up: Programming Jade
  687. Symbols
  688. =======
  689.    Symbols are objects with a name (usually a unique name), they are
  690. one of the most important data structures in Lisp since they are used to
  691. provided named variables (*note Variables::.) and functions (*note
  692. Functions::.).
  693.  - Function: symbolp OBJECT
  694.      This function returns `t' when its argument is a symbol.
  695. * Menu:
  696. * Symbol Syntax::               The read syntax of symbols
  697. * Symbol Attributes::           The objects stored in a symbol
  698. * Obarrays::                    Vectors used to store symbols
  699. * Creating Symbols::            Allocating new symbols
  700. * Interning::                   Putting a symbol into an obarray
  701. * Property Lists::              Each symbol has a set of properties
  702. File: jade.info,  Node: Symbol Syntax,  Next: Symbol Attributes,  Up: Symbols
  703. Symbol Syntax
  704. -------------
  705.    The read syntax of a symbol is simply its name; if the name contains
  706. any meta-characters (whitespace or any from `()[]'";|') they will have
  707. to be entered specially. There are two ways to tell the reader that a
  708. meta-character is actually part of the symbol's name:
  709.   1. Precede the meta-character by a backslash character (`\'), for
  710.      example:
  711.           xy\(z\)                 ;the symbol whose name is `xy(z)'
  712.   2. Enclose part of the name in vertical lines (two `|' characters).
  713.      All characters after the starting vertical line are copied as-is
  714.      until the closing vertical line is encountered. For example:
  715.           xy|(z)|                 ;the symbol `xy(z)'
  716.    Here are some example read syntaxes.
  717.      setq                    ; `setq'
  718.      |setq|                  ; `setq'
  719.      \s\e\t\q                ; `setq'
  720.      1                       ; the *number* 1
  721.      \1                      ; the *symbol* `1'
  722.      |!$%zf78&|              ; `!$%zf78&'
  723.      foo|(bar)|              ; `foo(bar)'
  724.      foo\(bar\)              ; `foo(bar)'
  725. File: jade.info,  Node: Symbol Attributes,  Next: Obarrays,  Prev: Symbol Syntax,  Up: Symbols
  726. Symbol Attributes
  727. -----------------
  728.    All symbols have four basic attributes, most important is the "print
  729. name" of the symbol. This is a string containing the name of the
  730. symbol, after it has been defined (when the symbol is first created) it
  731. may not be changed.
  732.  - Function: symbol-name SYMBOL
  733.      This function returns the print name of the symbol SYMBOL.
  734.           (symbol-name 'unwind-protect)
  735.               => "unwind-protect"
  736.    Each symbol also has a "value" cell storing the value of this symbol
  737. when it is referenced as a variable. Usually this cell is accessed
  738. implicitly by evaluating a variable form but it can also be read via
  739. the `symbol-value' function(1) (*note Variables::.).
  740.    Similar to the value cell each symbol also has a "function" cell
  741. which contains the function definition of the symbol (*note Named
  742. Functions::.). The `symbol-function' function can be used to read this
  743. cell and the `fset' function to set it.
  744.    Lastly, there is the symbol's "property list", this is similar to an
  745. alist (*note Association Lists::.) and provides a method of storing
  746. arbitrary extra values in each symbol. *Note Property Lists::.
  747.    ---------- Footnotes ----------
  748.    (1)  Actually buffer-local variables complicate matters but you'll
  749. learn about that later.
  750. File: jade.info,  Node: Obarrays,  Next: Creating Symbols,  Prev: Symbol Attributes,  Up: Symbols
  751. Obarrays
  752. --------
  753.    An "obarray" is the structure used to ensure that no two symbols have
  754. the same name and to provide quick access to a symbol given its name. An
  755. obarray is basically a vector (with a slight wrinkle), each element of
  756. the vector is a chain of symbols which share the same hash-value (a
  757. "bucket"). These symbols are chained together through links which are
  758. invisible to Lisp programs: if you examine an obarray you will see that
  759. each bucket looks as though it has at most one symbol stored in it.
  760.    The normal way to reference a symbol is simply to type its name in
  761. the program, when the Lisp reader encounters a name of a symbol it looks
  762. in the default obarray for a symbol of that name. If the named symbol
  763. doesn't exist it is created and hashed into the obarray -- this process
  764. is known as "interning" the symbol, for more details see *Note
  765. Interning::.
  766.  - Variable: obarray
  767.      This variable contains the obarray that the `read' function uses
  768.      when interning symbols. If you change this I hope you know what
  769.      you're doing.
  770.  - Function: make-obarray SIZE
  771.      This function creates a new obarray with SIZE hash buckets (this
  772.      should be a prime number for best results).
  773.      This is the only correct way of making an obarray.
  774.  - Function: find-symbol SYMBOL-NAME &optional OBARRAY
  775.      This function scans the specified obarray (OBARRAY or the value of
  776.      the variable `obarray' if OBARRAY is undefined) for a symbol whose
  777.      name is the string SYMBOL-NAME. The value returned is the symbol
  778.      if it can be found or `nil' otherwise.
  779.           (find-symbol "setq")
  780.               => setq
  781.  - Function: apropos REGEXP &optional PREDICATE OBARRAY
  782.      Returns a list of symbols from the obarray OBARRAY (or the default)
  783.      whose print name matches the regular expression REGEXP. If
  784.      PREDICATE is defined and not `nil', each symbol which matches
  785.      REGEXP is applied to the function PREDICATE, if the value is `t'
  786.      it is considered a match.
  787.      The PREDICATE argument is useful for restricting matches to a
  788.      certain type of symbol, for example only commands.
  789.           (apropos "^yank" 'commandp)
  790.               => (yank-rectangle yank yank-to-mouse)
  791. File: jade.info,  Node: Creating Symbols,  Next: Interning,  Prev: Obarrays,  Up: Symbols
  792. Creating Symbols
  793. ----------------
  794.    It is possible to allocate symbols dynamically, this is normally only
  795. necessary when the symbol is to be interned in the non-default obarray
  796. or the symbol is a temporary object which should not be interned (for
  797. example: labels in a compiler?).
  798.  - Function: make-symbol PRINT-NAME
  799.      This function creates and returns a new, uninterned, symbol whose
  800.      print name is the string PRINT-NAME. Its variable and function
  801.      value cells are void and it will have an empty property list.
  802.           (make-symbol "foo")
  803.               => foo
  804.  - Function: gensym
  805.      This function returns a new, uninterned, symbol which has a unique
  806.      print name.
  807.           (gensym)
  808.               => G0001
  809.           
  810.           (gensym)
  811.               => G0002
  812. File: jade.info,  Node: Interning,  Next: Property Lists,  Prev: Creating Symbols,  Up: Symbols
  813. Interning
  814. ---------
  815.    "Interning" a symbol means to store it in an obarray so that it can
  816. be found in the future: all variables and named-functions are stored in
  817. interned symbols.
  818.    When a symbol is interned a hash function is applied to its print
  819. name to determine which bucket in the obarray it should be stored in.
  820. Then it is simply pushed onto the front of that bucket's chain of
  821. symbols.
  822.    Normally all interning is done automatically by the Lisp reader.
  823. When it encounters the name of a symbol which it can't find in the
  824. default obarray (the value of the variable `obarray') it creates a new
  825. symbol of that name and interns it. This means that no two symbols can
  826. have the same print name, and that the read syntax of a particular
  827. symbol always produces the same object (unless the value of `obarray'
  828. is altered).
  829.      (eq 'some-symbol 'some-symbol)
  830.          => t
  831.  - Function: intern SYMBOL-NAME &optional OBARRAY
  832.      This function uses `find-symbol' to search the OBARRAY (or the
  833.      standard obarray) for a symbol called SYMBOL-NAME. If a symbol of
  834.      that name is found it is returned, otherwise a new symbol of that
  835.      name is created, interned into the obarray, and returned.
  836.           (intern "setq")
  837.               => setq
  838.           
  839.           (intern "my-symbol" my-obarray)
  840.               => my-symbol
  841.  - Function: intern-symbol SYMBOL &optional OBARRAY
  842.      Interns the symbol SYMBOL into the obarray OBARRAY (or the
  843.      standard one) then returns the symbol. If SYMBOL is currently
  844.      interned in an obarray an error is signalled.
  845.           (intern-symbol (make-symbol "foo"))
  846.               => foo
  847.           
  848.           (intern-symbol 'foo)
  849.               error--> Error: Symbol is already interned, foo
  850.  - Function: unintern SYMBOL &optional OBARRAY
  851.      This function removes the symbol SYMBOL from the obarray OBARRAY
  852.      then returns the symbol.
  853.      Beware! this function must be used with *extreme* caution -- once
  854.      you unintern a symbol there's no way to recover it.
  855.           (unintern 'setq)                ;This is extremely stupid
  856.               => setq
  857. File: jade.info,  Node: Property Lists,  Prev: Interning,  Up: Symbols
  858. Property Lists
  859. --------------
  860.    Each symbol has a property list (or "plist"), this is a structure
  861. which associates an arbitrary Lisp object with a key (usually a
  862. symbol). The keys in a plist may not have any duplications (so that
  863. each property is only defined once).
  864.    The concept of a property list is very similar to an association list
  865. (*note Association Lists::.) but there are two main differences:
  866.   1. Structure; each element of an alist represents one key/association
  867.      pair. In a plist each pair of elements represents an association:
  868.      the first is the key, the second the property. For example, where
  869.      an alist may be,
  870.           ((one . 1) (two . 2) (three . 3))
  871.      a property list would be,
  872.           (one 1 two 2 three 3)
  873.   2. Plists have their own set of functions to modify the list. This is
  874.      done destructively, altering the property list (since the plist is
  875.      stored in only one location, the symbol, this is quite safe).
  876.  - Function: get SYMBOL PROPERTY
  877.      This function searches the property list of the symbol SYMBOL for
  878.      a property `eq' to PROPERTY. If such a property is found it is
  879.      returned, else the value `nil' is returned.
  880.           (get 'if 'lisp-indent)
  881.               => 2
  882.           
  883.           (get 'set 'lisp-indent)
  884.               => nil
  885.  - Function: put SYMBOL PROPERTY NEW-VALUE
  886.      `put' sets the value of the property PROPERTY to NEW-VALUE in the
  887.      property list of the symbol SYMBOL. If there is an existing value
  888.      for this property it is overwritten. The value returned is
  889.      NEW-VALUE.
  890.           (put 'foo 'prop 200)
  891.               => 200
  892.  - Function: symbol-plist SYMBOL
  893.      Returns the property list of the symbol SYMBOL.
  894.           (symbol-plist 'if)
  895.               => (lisp-indent 2)
  896.  - Function: setplist SYMBOL PLIST
  897.      This function sets the property list of the symbol SYMBOL to PLIST.
  898.           (setplist 'foo '(zombie yes))
  899.               => (zombie yes)
  900. File: jade.info,  Node: Evaluation,  Next: Control Structures,  Prev: Symbols,  Up: Programming Jade
  901. Evaluation
  902. ==========
  903.    So far I have only discussed a few of the various data types
  904. available and how the Lisp reader can convert textual descriptions of
  905. these types into Lisp objects. Obviously there has to be a way of
  906. actually computing something -- it would be difficult to write a useful
  907. program otherwise.
  908.    What sets Lisp apart from other languages is that in Lisp there is no
  909. difference between programs and data: a Lisp program is just a sequence
  910. of Lisp objects which will be interpreted when the program is run.
  911.    The subsystem which does this interpreting is called the "Lisp
  912. evaluator" and each expression to be evaluated is called a "form". The
  913. evaluator (the function `eval') examines the structure of the form that
  914. is applied to and computes the value of the form within the current
  915. environment.
  916.    A form can be any type of data object; the only types which the
  917. evaluator treats specially are symbols (which stand for variables) and
  918. lists, anything else is returned as-is (and is called a
  919. "self-evaluating form").
  920.  - Function: eval FORM
  921.      This function computes the value of the form which is its
  922.      argument, within the current environment. The computed value is
  923.      then returned.  `eval' is the basic function for interpreting Lisp
  924.      objects.
  925. * Menu:
  926. * Symbol Forms::                How variables are accessed
  927. * List Forms::                  Subroutine calls
  928. * Self-Evaluating Forms::       Forms which don't get evaluated
  929. * Quoting::                     How to prevent evaluation of forms
  930. File: jade.info,  Node: Symbol Forms,  Next: List Forms,  Up: Evaluation
  931. Symbol Forms
  932. ------------
  933.    When the evaluator is applied to a symbol the computed value of the
  934. form is the object stored in the symbol's variable slot. Basically this
  935. means that to get the value of a variable you simply write its name.
  936. For example,
  937.      buffer-list
  938.          => (#<buffer *jade*> #<buffer programmer.texi>)
  939. this extract from a Lisp session shows the read syntax of a form to get
  940. the value of the variable `buffer-list' and the result when this form
  941. is evaluated.
  942.    Since forms are evaluated within the current environment the value of
  943. a variable is its newest binding, or in the case of buffer-local
  944. variables, its value in the current buffer. *Note Variables::.
  945.    If the value of an evaluated symbol is void an error is signalled.
  946. File: jade.info,  Node: List Forms,  Next: Self-Evaluating Forms,  Prev: Symbol Forms,  Up: Evaluation
  947. List Forms
  948. ----------
  949.    Forms which are lists are used to call a subroutine. The first
  950. element of the list is the subroutine which is to be called; all
  951. further elements are arguments to be applied to the subroutine.
  952.    There are several different types of subroutines available:
  953. functions, macros, special forms and autoloads. When the evaluator
  954. finds a form which is a list it tries to classify the form into one of
  955. these four types.  First of all it looks at the first element of the
  956. list, if it is a symbol it gets the value from the function slot of the
  957. symbol (note that the first element of a list form is *never* evaluated
  958. itself). This value (either the first element or the symbol's function
  959. value) is enough to classify the form into one of the four types.
  960. * Menu:
  961. * Function Call Forms::         `Normal' subroutines
  962. * Macro Call Forms::            Source code expansions
  963. * Special Forms::               Abnormal control structures
  964. * Autoload Forms::              Loading subroutines from files on the fly
  965. File: jade.info,  Node: Function Call Forms,  Next: Macro Call Forms,  Up: List Forms
  966. Function Call Forms
  967. ...................
  968.    The first element of a function call form is the name of the
  969. function, this can be either a symbol (in which case the symbol's
  970. function value is indirected through to get the real function
  971. definition) or a lambda expression (*note Lambda Expressions::.).
  972.    Any other elements of the list are forms to be evaluated (in left to
  973. right order) and their values become the arguments to the function. The
  974. function is applied to these arguments and the result that it returns
  975. becomes the value of the form.
  976.    For example, consider the form `(/ 100 (1+ 4))'. This is a function
  977. call to the function `/'. First the `100' form is evaluated: it returns
  978. the value `100', next the form `(1+ 4)' is evaluated. This is also a
  979. function call and computes to a value of `5' which becomes the second
  980. argument to the `/' function. Now the `/' function is applied to its
  981. arguments of `100' and `5' and it returns the value `20' which then
  982. becomes the value of the form `(/ 100 (1+ 4))'.
  983.      (/ 100 (1+ 4))
  984.      == (/ 100 5)
  985.      => 20
  986.    Or another example,
  987.      (+ (- 10 (1- 7)) (* (1+ 2) 4)
  988.      == (+ (- 10 6) (* (1+ 2) 4)
  989.      == (+ 4 (* (1+ 2) 4)
  990.      == (+ 4 (* 3 4))
  991.      == (+ 4 12)
  992.      => 16
  993. File: jade.info,  Node: Macro Call Forms,  Next: Special Forms,  Prev: Function Call Forms,  Up: List Forms
  994. Macro Call Forms
  995. ................
  996.    Macros are source code expansions, the general idea is that a macro
  997. is a function which using the unevaluated arguments applied to it,
  998. computes another form (the expansion of the macro and its arguments)
  999. which is then evaluated to provide the value of the form. For more
  1000. details see *Note Macros::.
  1001. File: jade.info,  Node: Special Forms,  Next: Autoload Forms,  Prev: Macro Call Forms,  Up: List Forms
  1002. Special Forms
  1003. .............
  1004.    Special forms are built-in functions which the evaluator knows must
  1005. be handled specially. The main difference between a special form and a
  1006. function is that the arguments applied to a special form are *not*
  1007. automatically evaluated -- if necessary the special form will evaluate
  1008. arguments itself.  This will be noted in the documentation of the
  1009. special form.
  1010.    Special forms are generally used to provide control structures, for
  1011. example, all of the conditional constructs are special forms (if all of
  1012. their arguments, including the forms to be conditionally evaluated,
  1013. were evaluated automatically this would defeat the object of being
  1014. conditional!).
  1015.    The special forms supported by Jade are: `and', `catch', `cond',
  1016. `defconst', `defmacro', `defun', `defvar', `error-protect', `function',
  1017. `if', `let', `let*', `or', `prog1', `prog2', `progn', `quote', `setq',
  1018. `setq-default', `unless', `unwind-protect', `when', `while',
  1019. `with-buffer', `with-window'.
  1020. File: jade.info,  Node: Autoload Forms,  Prev: Special Forms,  Up: List Forms
  1021. Autoload Forms
  1022. ..............
  1023.    Not all modules of Jade are needed at once, autoload forms provide a
  1024. means of marking that a function (or macro) is contained by a specific
  1025. file of Lisp code. The first time that the function is accessed the
  1026. autoload form will be evaluated; this loads the file that the function
  1027. is contained by then re-evaluates the list form.
  1028.    By then the autoload form will have been overwritten in the symbol's
  1029. function slot by the true function (when it was loaded) so the form
  1030. will execute properly.
  1031.    An autoload form is a list whose first element is the symbol
  1032. `autoload', for full details see *Note Autoloading::.
  1033. File: jade.info,  Node: Self-Evaluating Forms,  Next: Quoting,  Prev: List Forms,  Up: Evaluation
  1034. Self-Evaluating Forms
  1035. ---------------------
  1036.    The computed value of any form which is not a symbol or a list will
  1037. simply be the form itself and the form is said to be a "self-evaluating
  1038. form".
  1039.    Usually the only forms to be evaluated in this way will be numbers,
  1040. strings and vectors (since they are the only other data types which
  1041. have read syntaxes) but the effect is the same for other types of data.
  1042.    This means that forms you know are self-evaluating do not have to be
  1043. quoted to be used as constants (like lists and symbols do).
  1044.      "foo"
  1045.          => "foo"
  1046.      
  1047.      (eval (current-buffer))
  1048.          => #<buffer programmer.texi>
  1049. File: jade.info,  Node: Quoting,  Prev: Self-Evaluating Forms,  Up: Evaluation
  1050. Quoting
  1051. -------
  1052.    As the above sections explain some types of Lisp object have special
  1053. meaning to the Lisp evaluator (namely the symbol and list types) this
  1054. means that if you want to refer to a symbol or a list in a program you
  1055. can't (yet) because the evaluator will treat the form as either a
  1056. variable reference or a function call respectively.
  1057.    To get around this Lisp uses something called "quoting", the `quote'
  1058. special form simply returns its argument, without evaluating it. For
  1059. example,
  1060.      (quote my-symbol)
  1061.          => my-symbol
  1062. the `quote' form prevents the `my-symbol' being treated as a variable
  1063. -- it is effectively `hidden' from the evaluator.
  1064.    Writing `quote' all the time would be a bit boring so there is a
  1065. shortcut: the Lisp reader treats any form X preceded by a single quote
  1066. character (`'') as the form `(quote X)'. So the example above would
  1067. normally be written as,
  1068.      'my-symbol
  1069.          => my-symbol
  1070.  - Special Form: quote FORM
  1071.      This special form returns its single argument without evaluating
  1072.      it. This is used to "quote" constant objects to prevent them from
  1073.      being evaluated.
  1074.